#include "listitembox.h"
#include "ui_listitembox.h"

listItemBox::listItemBox(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::listItemBox)
    , is_like_(false)
{
    ui->setupUi(this);
    // 连接爱心按钮的点击信号到对应的槽函数
    // 当用户点击爱心按钮时，将会触发listItemBox类中的onLikeBtnClicked槽函数
    connect(ui->likeBtn, &QPushButton::clicked, this, &listItemBox::onLikeBtnClicked);
}
/**
 * @brief 设置音乐名称
 * @param music_name 音乐名称字符串
 * @details 该函数用于设置列表项中显示的音乐名称，
 *          通过更新musicNameLabel标签的文本内容来实现。
 * @note 此函数是const成员函数，不会修改对象状态
 */
void listItemBox::setMusicName(const QString &music_name) const
{
    ui->musicNameLabel->setText(music_name);
}
/**
 * @brief 设置音乐歌手
 * @param music_singer 音乐歌手字符串
 * @details 该函数用于设置列表项中显示的音乐歌手信息，
 *          通过更新musicSingerLabel标签的文本内容来实现。
 * @note 此函数是const成员函数，不会修改对象状态
 */
void listItemBox::setMusicSinger(const QString &music_singer) const
{
    ui->musicSingerLabel->setText(music_singer);
}
/**
 * @brief 设置音乐专辑
 * @param music_album 音乐专辑字符串
 * @details 该函数用于设置列表项中显示的音乐专辑信息，
 *          通过更新musicAlbumLabel标签的文本内容来实现。
 * @note 此函数是const成员函数，不会修改对象状态
 */
void listItemBox::setMusicAlbum(const QString &music_album) const
{
    ui->musicAlbumLabel->setText(music_album);
}
/**
 * @brief 设置音乐喜欢状态
 * @param is_like 布尔值，表示音乐是否被喜欢
 * @details 该函数用于设置音乐的喜欢状态，并更新喜欢按钮的图标显示：
 *          - 如果is_like为true，显示实心喜欢图标
 *          - 如果is_like为false，显示空心喜欢图标
 */
void listItemBox::setMusicLike(const bool is_like)
{
    this->is_like_ = is_like;
    if (is_like)
    {
        // 设置实心喜欢图标
        ui->likeBtn->setIcon(QIcon(":/images/like_2.png"));
    }
    else
    {
        // 设置空心喜欢图标
        ui->likeBtn->setIcon(QIcon(":/images/like_3.png"));
    }
}
/**
 * @brief 喜欢按钮点击事件处理函数
 * @details 该函数在用户点击喜欢按钮时被调用，
 *          执行以下操作：
 *          1. 切换音乐的喜欢状态
 *          2. 更新喜欢按钮的图标显示
 *          3. 发出setIsLike信号通知状态变化
 */
void listItemBox::onLikeBtnClicked()
{
    // 切换喜欢状态
    is_like_ = !is_like_;
    // 更新按钮图标显示
    setMusicLike(is_like_);
    // 发出信号通知喜欢状态改变
    emit setIsLike(is_like_);
}

listItemBox::~listItemBox()
{
    // qDebug() << "销毁";
    delete ui;
}


/**
 * @brief 处理鼠标进入事件
 * @param event 鼠标进入事件对象
 * @details 该函数在鼠标光标进入列表项区域时被调用，
 *          设置列表项的背景色为浅灰色(#EFEFEF)，以提供视觉反馈。
 * @note 此函数重写了父类QWidget的enterEvent虚函数
 */
void listItemBox::enterEvent(QEnterEvent *event)
{
    (void) event;
    setStyleSheet("background-color:#EFEFEF");
}

/**
 * @brief 处理鼠标离开事件
 * @param event 鼠标离开事件对象
 * @details 该函数在鼠标光标离开列表项区域时被调用，
 *          清除列表项的背景色样式，恢复默认显示状态。
 * @note 此函数重写了父类QWidget的leaveEvent虚函数
 */
void listItemBox::leaveEvent(QEvent *event)
{
    (void) event;
    setStyleSheet("");
}

